﻿/*
 ***************************************************************************
 * Microsoft Visual C# .NET
 * 名称：       Shpm.System.Web.Control.CheckFax
 * 类型：       服务端输入校验类
 * 功能说明：   FAX号码校验类
 * 作者：       郭晓庆
 * 创建日期：   2007/07/10
 * 修改日期     修改者      修改内容
 * 
 * 
 * ---
 ***************************************************************************
*/
using System;
using System.Collections.Generic;
using System.Text;

namespace Shpm.System.Web.Control
{
    public class CheckFax : ComAbsChecker
    {
         /* 构造函数
	     * @param value 输入值
	     */
        public CheckFax(String value)
            : base(value)
        {

        }

        public CheckFax(String value, Shpm.System.Validator.ComAbsMsg msg)
            : base(value, msg)
        {           
        }

	    /**
	     * 检查处理。
	     * <pre>
	     * 检查内容：
	     * ① 头尾“-”存在检查
	     * ② “(” 和 “)" 的长度检查
	     * ③ “(” 和 “)” 的位置检查
	     * ④ “()” 中的数值检查
	     * ⑤ 数值检查
	     * ※ “((()))”重复检查
	     * </pre>
	     * @param value 输入值
	     * @return true:正常 / false:异常
	     */
	    protected override bool doCheck(String value){

		    // 未输入检查
		    if( base.isEmpty(value) ){
			    return true;
		    }
    		
	        /*
	         * ① 头尾“-”存在检查
		     * ② “(” 和 “)" 的长度检查
		     * ③ “(” 和 “)” 的位置检查
		     * ④ “()” 中的数值检查
		     * ⑤ 数值检查
		     * ※ “((()))”重复检查
		     */
    		
		    int left   = 0;
		    int right  = 0;
		    for( int i=0; i< value.Length; i++ ){
			    // ③检查
			    if( left < right )	return false;

			    char c = value[i];
    			
			    if( c == '-' ){
				    // ①检查
                    if (i == 0 || i == value.Length - 1) return false;
			    }
			    else if( c == '(' ){
				    left++;
			    }
			    else if( c == ')' ){
				    // ④检查
				    if( i == 0 || value[i-1] == '(') return false;
				    right++;
			    }
			    else{
				    // ⑤检查
				    if( Char.IsDigit(c) == false ) {
	                    return false;
				    }
			    }
		    }
    		
		    // ②检查
		    if( left != right )	return false;
    		
		    return true;
    		
	    }
    }
}
